package com.example.designpatterns.state;

/**
 * StatePatternDemo类 - 状态模式演示
 * 
 * 演示在电商订单场景中使用状态模式
 */
public class StatePatternDemo {
    public static void main(String[] args) {
        // 创建订单上下文对象
        Context order = new Context("ORDER20240501001");
        
        // 显示初始状态
        System.out.println(order.getStatusDescription());
        
        // 模拟订单流程 - 正常流程：待付款 -> 待发货 -> 已发货 -> 已完成
        System.out.println("\n=== 订单正常流程 ===");
        order.pay();
        System.out.println(order.getStatusDescription());
        order.ship();
        System.out.println(order.getStatusDescription());
        order.receive();
        System.out.println(order.getStatusDescription());
        
        // 创建新订单
        Context order2 = new Context("ORDER20240501002");
        
        // 模拟订单流程 - 取消流程：待付款 -> 已取消
        System.out.println("\n=== 未付款订单取消流程 ===");
        System.out.println(order2.getStatusDescription());
        order2.cancel();
        System.out.println(order2.getStatusDescription());
        
        // 创建新订单
        Context order3 = new Context("ORDER20240501003");
        
        // 模拟订单流程 - 退款流程：待付款 -> 待发货 -> 退款中 -> 已取消
        System.out.println("\n=== 已付款订单退款流程 ===");
        System.out.println(order3.getStatusDescription());
        order3.pay();
        System.out.println(order3.getStatusDescription());
        order3.refund();
        System.out.println(order3.getStatusDescription());
        order3.cancel();
        System.out.println(order3.getStatusDescription());
        
        // 模拟无效操作
        System.out.println("\n=== 无效操作处理 ===");
        Context order4 = new Context("ORDER20240501004");
        System.out.println(order4.getStatusDescription());
        // 尝试未付款发货
        order4.ship();
        // 尝试未付款收货
        order4.receive();
        // 尝试未付款退款
        order4.refund();
        
        // 模拟已取消订单的操作
        System.out.println("\n=== 已取消订单操作 ===");
        Context order5 = new Context("ORDER20240501005");
        order5.cancel();
        System.out.println(order5.getStatusDescription());
        // 尝试已取消订单支付
        order5.pay();
        // 尝试已取消订单发货
        order5.ship();
    }
} 